YES 0.848 H-Termination proof of /home/matraf/haskell/eval_FullyBlown_Fast/List.hs
H-Termination of the given Haskell-Program with start terms could successfully be proven:



HASKELL
  ↳ LR

mainModule List
  ((mapAccumL :: (b  ->  c  ->  (b,a))  ->  b  ->  [c ->  (b,[a])) :: (b  ->  c  ->  (b,a))  ->  b  ->  [c ->  (b,[a]))

module List where
  import qualified Maybe
import qualified Prelude

  mapAccumL :: (b  ->  c  ->  (b,a))  ->  b  ->  [c ->  (b,[a])
mapAccumL s [] (s,[])
mapAccumL f s (x : xs
(s'',y : ys) where 
s' (\(s',_) ->s') vv5
s'' (\(s'',_) ->s'') vv6
vv5 f s x
vv6 mapAccumL f s' xs
y (\(_,y) ->y) vv5
ys (\(_,ys) ->ys) vv6


module Maybe where
  import qualified List
import qualified Prelude



Lambda Reductions:
The following Lambda expression
\(_,y)→y

is transformed to
y0 (_,y) = y

The following Lambda expression
\(_,ys)→ys

is transformed to
ys0 (_,ys) = ys

The following Lambda expression
\(s'',_)→s''

is transformed to
s''0 (s'',_) = s''

The following Lambda expression
\(s',_)→s'

is transformed to
s'0 (s',_) = s'



↳ HASKELL
  ↳ LR
HASKELL
      ↳ BR

mainModule List
  ((mapAccumL :: (c  ->  b  ->  (c,a))  ->  c  ->  [b ->  (c,[a])) :: (c  ->  b  ->  (c,a))  ->  c  ->  [b ->  (c,[a]))

module List where
  import qualified Maybe
import qualified Prelude

  mapAccumL :: (c  ->  b  ->  (c,a))  ->  c  ->  [b ->  (c,[a])
mapAccumL s [] (s,[])
mapAccumL f s (x : xs
(s'',y : ys) where 
s' s'0 vv5
s'' s''0 vv6
s''0 (s'',_) s''
s'0 (s',_) s'
vv5 f s x
vv6 mapAccumL f s' xs
y y0 vv5
y0 (_,yy
ys ys0 vv6
ys0 (_,ysys


module Maybe where
  import qualified List
import qualified Prelude



Replaced joker patterns by fresh variables and removed binding patterns.

↳ HASKELL
  ↳ LR
    ↳ HASKELL
      ↳ BR
HASKELL
          ↳ COR

mainModule List
  ((mapAccumL :: (b  ->  a  ->  (b,c))  ->  b  ->  [a ->  (b,[c])) :: (b  ->  a  ->  (b,c))  ->  b  ->  [a ->  (b,[c]))

module List where
  import qualified Maybe
import qualified Prelude

  mapAccumL :: (b  ->  a  ->  (b,c))  ->  b  ->  [a ->  (b,[c])
mapAccumL vw s [] (s,[])
mapAccumL f s (x : xs
(s'',y : ys) where 
s' s'0 vv5
s'' s''0 vv6
s''0 (s'',vzs''
s'0 (s',wus'
vv5 f s x
vv6 mapAccumL f s' xs
y y0 vv5
y0 (vy,yy
ys ys0 vv6
ys0 (vx,ysys


module Maybe where
  import qualified List
import qualified Prelude



Cond Reductions:
The following Function with conditions
undefined 
 | False
 = undefined

is transformed to
undefined  = undefined1

undefined0 True = undefined

undefined1  = undefined0 False



↳ HASKELL
  ↳ LR
    ↳ HASKELL
      ↳ BR
        ↳ HASKELL
          ↳ COR
HASKELL
              ↳ LetRed

mainModule List
  ((mapAccumL :: (b  ->  c  ->  (b,a))  ->  b  ->  [c ->  (b,[a])) :: (b  ->  c  ->  (b,a))  ->  b  ->  [c ->  (b,[a]))

module List where
  import qualified Maybe
import qualified Prelude

  mapAccumL :: (b  ->  c  ->  (b,a))  ->  b  ->  [c ->  (b,[a])
mapAccumL vw s [] (s,[])
mapAccumL f s (x : xs
(s'',y : ys) where 
s' s'0 vv5
s'' s''0 vv6
s''0 (s'',vzs''
s'0 (s',wus'
vv5 f s x
vv6 mapAccumL f s' xs
y y0 vv5
y0 (vy,yy
ys ys0 vv6
ys0 (vx,ysys


module Maybe where
  import qualified List
import qualified Prelude



Let/Where Reductions:
The bindings of the following Let/Where expression
(s'',y : ys)
where 
s'  = s'0 vv5
s''  = s''0 vv6
s''0 (s'',vz) = s''
s'0 (s',wu) = s'
vv5  = f s x
vv6  = mapAccumL f s' xs
y  = y0 vv5
y0 (vy,y) = y
ys  = ys0 vv6
ys0 (vx,ys) = ys

are unpacked to the following functions on top level
mapAccumLYs wx wy wz xu = mapAccumLYs0 wx wy wz xu (mapAccumLVv6 wx wy wz xu)

mapAccumLYs0 wx wy wz xu (vx,ys) = ys

mapAccumLS''0 wx wy wz xu (s'',vz) = s''

mapAccumLVv5 wx wy wz xu = wx wy wz

mapAccumLS'' wx wy wz xu = mapAccumLS''0 wx wy wz xu (mapAccumLVv6 wx wy wz xu)

mapAccumLVv6 wx wy wz xu = mapAccumL wx (mapAccumLS' wx wy wz xuxu

mapAccumLS'0 wx wy wz xu (s',wu) = s'

mapAccumLY wx wy wz xu = mapAccumLY0 wx wy wz xu (mapAccumLVv5 wx wy wz xu)

mapAccumLY0 wx wy wz xu (vy,y) = y

mapAccumLS' wx wy wz xu = mapAccumLS'0 wx wy wz xu (mapAccumLVv5 wx wy wz xu)



↳ HASKELL
  ↳ LR
    ↳ HASKELL
      ↳ BR
        ↳ HASKELL
          ↳ COR
            ↳ HASKELL
              ↳ LetRed
HASKELL
                  ↳ Narrow

mainModule List
  (mapAccumL :: (c  ->  a  ->  (c,b))  ->  c  ->  [a ->  (c,[b]))

module List where
  import qualified Maybe
import qualified Prelude

  mapAccumL :: (b  ->  a  ->  (b,c))  ->  b  ->  [a ->  (b,[c])
mapAccumL vw s [] (s,[])
mapAccumL f s (x : xs(mapAccumLS'' f s x xs,mapAccumLY f s x xs : mapAccumLYs f s x xs)

  
mapAccumLS' wx wy wz xu mapAccumLS'0 wx wy wz xu (mapAccumLVv5 wx wy wz xu)

  
mapAccumLS'' wx wy wz xu mapAccumLS''0 wx wy wz xu (mapAccumLVv6 wx wy wz xu)

  
mapAccumLS''0 wx wy wz xu (s'',vzs''

  
mapAccumLS'0 wx wy wz xu (s',wus'

  
mapAccumLVv5 wx wy wz xu wx wy wz

  
mapAccumLVv6 wx wy wz xu mapAccumL wx (mapAccumLS' wx wy wz xu) xu

  
mapAccumLY wx wy wz xu mapAccumLY0 wx wy wz xu (mapAccumLVv5 wx wy wz xu)

  
mapAccumLY0 wx wy wz xu (vy,yy

  
mapAccumLYs wx wy wz xu mapAccumLYs0 wx wy wz xu (mapAccumLVv6 wx wy wz xu)

  
mapAccumLYs0 wx wy wz xu (vx,ysys


module Maybe where
  import qualified List
import qualified Prelude



Haskell To QDPs


↳ HASKELL
  ↳ LR
    ↳ HASKELL
      ↳ BR
        ↳ HASKELL
          ↳ COR
            ↳ HASKELL
              ↳ LetRed
                ↳ HASKELL
                  ↳ Narrow
QDP
                      ↳ QDPSizeChangeProof

Q DP problem:
The TRS P consists of the following rules:

new_mapAccumLVv6(xv3, xv50, xv51, ba, bb, bc) → new_mapAccumL(xv3, xv51, ba, bb, bc)
new_mapAccumL(xv3, :(xv50, xv51), ba, bb, bc) → new_mapAccumLVv6(xv3, xv50, xv51, ba, bb, bc)
new_mapAccumL(xv3, :(xv50, xv51), ba, bb, bc) → new_mapAccumL(xv3, xv51, ba, bb, bc)

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs: